<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        p {
            height: 40px;
            line-height: 40px;
            /* border: 1px dashed #333; */
        }
    </style>
</head>

<body>
    <!-- HTML属性的属性名只能是小写,如果写成大写会自动转化为小写 -->

    <div id="app">
        
        <!-- 模拟双向数据绑定 -->
        <!-- <p>
            <input type="text" :value="msg" @change="changeHander">
            <input type="text" :value="msg" @input="changeHander">
        </p> -->

        <p> 
            <!-- 在input:text input:password 和 textarea中  v-model 将数据和value属性绑定, 通过input事件检测到内容改变后, 将其更新到数据 -->
            <input type="text" v-model="msg">
        </p>
        <p>
            msg: {{msg}}
        </p>
        <p>
            <button @click="msg = msg.toUpperCase()">change</button>
        </p>
     
    </div>
</body>
<script>

    /* 
        双向数据绑定
            1. 数据监听 当数据改变后,  重新更新视图
            2. DOM监听  当视图内容改变后,也会将其更新到数据    


        v-model 指令在表单 <input>、<textarea> 及 <select> 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇，但 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据，


        v-model 在内部为不同的输入元素使用不同的 property 并抛出不同的事件：

        text 和 textarea 元素使用 value property 和 input 事件；
        checkbox 和 radio 使用 checked property 和 change 事件；
        select 字段将 value 作为 prop 并将 change 作为事件。
    */


   

    var vm = new Vue({
        el: "#app",
        data: {
            msg:"hello world", 
        },
        methods: {
            changeHander(e){
                console.log("事件对象",e);
                this.msg = e.target.value;
            }
        }

    })

</script>

</html>